#!/usr/bin/env python3.11
# -*- coding: utf-8 -*-
"""
通讯录管理系统 v1.0
单文件整洁版：无 global，可测试，可稍后无痛拆模块。
由 kimi k2 修改生成
"""

from __future__ import annotations


# ---------- 数据区 ----------
def _load_contacts() -> dict[str, dict[str, str]]:
    return {
        "张三": {"phone": "1234567", "email": "zhangsan@test.com"},
        "李四": {"phone": "2345678", "email": "lisi@test.com"},
    }


contacts: dict[str, dict[str, str]] = _load_contacts()


# ---------- 业务函数区 ----------
def dump_contacts() -> str:
    """返回当前通讯录字符串"""
    if not contacts:
        return "通讯录当前为空。"
    return "\n".join(f"{name} : {info}" for name, info in contacts.items())


def add_contact() -> str:
    """1. 添加联系人"""
    name = input("请输入要添加的学生姓名：").strip()
    phone = input("请输入学生的手机号：").strip()
    email = input("请输入学生的电子邮箱：").strip()
    contacts[name] = {"phone": phone, "email": email}
    return f"已成功添加。\n{dump_contacts()}"


def delete_contact() -> str:
    """2. 删除联系人"""
    name = input("请输入要删除的学生姓名：").strip()
    if name not in contacts:
        return f"学生 {name} 不存在，请检查是否输入有误！\n{dump_contacts()}"
    del contacts[name]
    return f"{name} 已被删除。\n{dump_contacts()}"


def modify_contact() -> str:
    """3. 修改联系人"""
    name = input("请输入修改信息的学生姓名：").strip()
    if name not in contacts:
        return f"学生 {name} 不存在，请检查是否输入有误！\n{dump_contacts()}"
    phone = input("请输入修改后的学生电话：").strip()
    email = input("请输入修改后的学生邮箱：").strip()
    contacts[name].update({"phone": phone, "email": email})
    return f"{name} 信息已更新。\n{dump_contacts()}"


def query_contact() -> str:
    """4. 查询联系人"""
    name = input("请输入要查询的学生姓名：").strip()
    if name not in contacts:
        return f"学生 {name} 无数据，请检查是否输入有误！"
    return f"{name} : {contacts[name]}"


def get_all_message() -> str:
    """5. 获取所有联系人通讯信息"""
    return dump_contacts()


# ---------- 界面区 ----------
def menu() -> str:
    """打印菜单并返回用户选择"""
    print("-" * 50)
    print("  通讯录管理系统 v1.0")
    print("1. 添加联系人")
    print("2. 删除联系人")
    print("3. 修改联系人")
    print("4. 查询联系人")
    print("5. 获取所有联系人通讯信息")
    print("6. 退出系统")
    print("-" * 50)
    return input("请输入功能序号：").strip()


# ---------- 主循环 ----------
def main() -> None:
    while True:
        choice = menu()
        match choice:
            case "1":
                print(add_contact())
            case "2":
                print(delete_contact())
            case "3":
                print(modify_contact())
            case "4":
                print(query_contact())
            case "5":
                print(get_all_message())
            case "6":
                print("感谢使用，再见！")
                break
            case _:
                print("输入不合法，请重新选择！")


# ---------- 入口 ----------
if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n用户中断")
